// https://www.acwing.com/problem/content/843/

#include <iostream>
#include <string>

using namespace std;

const int N = 100010;
const int P = 131;

unsigned long long h[N];
unsigned long long w[N];

// h[i]前i个字符的hash值
// 字符串变成一个p进制数字，体现了字符+顺序，需要确保不同的字符串对应不同的数字
// P = 131 或  13331 Q=2^64，在99%的情况下不会出现冲突
// 使用场景： 两个字符串的子串是否相同
unsigned long long query(int left, int right){
    return h[right] - h[left-1] * w[right-left+1];
}

int main() {
    int n, m;
    string word;
    scanf("%d%d", &n, &m);
    cin>>word;
    w[0] = 1;
    h[0] = 0;
    for(int i=0; i<n; i++){
        w[i+1] = w[i] * P;
        h[i+1] = h[i]*P + word[i];      //前缀和求整个字符串的哈希值
    }

    while(m--) {
        int l1,r1,l2,r2;
        cin>>l1>>r1>>l2>>r2;
        if(query(l1,r1) == query(l2,r2)) {
            puts("Yes");
        }
        else {
            puts("No");
        }
    }

    return 0;
}
